#ifndef _SEM_HPP_
#define _SEM_HPP_

#include <iostream>
#include <semaphore.h>

// RAII
class Sem
{
public:
    Sem(int value)
    {
        sem_init(&sem_, 0, value);
    }
    // 对信号量的p操作，申请操作
    // 申请失败需要wait来阻塞
    void p()
    {
        sem_wait(&sem_);
    }
    // 对信号量的v操作，释放操作
    void v()
    {
        sem_post(&sem_);
    }
    ~Sem()
    {
        sem_destroy(&sem_);
    }
private:
    sem_t sem_;
};

#endif